package models

import (
	"time"

	"gorm.io/gorm"
)

// Category 分类模型 - 基于Meta模型，对应Typecho的metas表中type=category的记录
type Category struct {
	ID          uint   `gorm:"primaryKey;column:mid" json:"id"`
	Name        string `gorm:"size:200;not null" json:"name"`
	Slug        string `gorm:"size:200;uniqueIndex;not null" json:"slug"`
	Type        string `gorm:"size:32;default:'category'" json:"type"`
	Description string `gorm:"size:200" json:"description"`
	Count       int    `gorm:"default:0" json:"count"`
	Order       int    `gorm:"column:order;default:0" json:"order"`
	Parent      int    `gorm:"default:0" json:"parent"`

	// GORM关联
	Posts []Post `gorm:"-" json:"posts"`

	// 辅助字段
	Children  []Category     `gorm:"-" json:"children"`
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}

// 添加钩子函数
func (c *Category) AfterCreate(tx *gorm.DB) error {
	// 创建分类后的处理逻辑
	return nil
}

func (c *Category) AfterUpdate(tx *gorm.DB) error {
	// 更新分类后的处理逻辑
	return nil
}

func (c *Category) AfterDelete(tx *gorm.DB) error {
	// 删除分类后的处理逻辑
	return nil
}

// TableName 设置表名
func (Category) TableName() string {
	return "categories"

}

// Tag 标签模型 - 基于Meta模型，对应Typecho的metas表中type=tag的记录
type Tag struct {
	ID          uint   `gorm:"primaryKey;column:mid" json:"id"`
	Name        string `gorm:"size:200;not null" json:"name"`
	Slug        string `gorm:"size:200;uniqueIndex;not null" json:"slug"`
	Type        string `gorm:"size:32;default:'tag'" json:"type"`
	Description string `gorm:"size:200" json:"description"`
	Count       int    `gorm:"default:0" json:"count"`
	Order       int    `gorm:"column:order;default:0" json:"order"`

	// GORM关联
	Posts []Post `gorm:"-" json:"posts"`

	// 辅助字段
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}

// TableName 设置表名
func (Tag) TableName() string {
	return "metas"
}
